package cn.bdqn.service.impl;

import cn.bdqn.domain.Base;
import cn.bdqn.domain.Dict;
import cn.bdqn.domain.Overview;
import cn.bdqn.mapper.BaseMapper;
import cn.bdqn.mapper.DictMapper;
import cn.bdqn.mapper.OverviewMapper;
import cn.bdqn.service.BaseService;
import cn.bdqn.utils.result.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 基地业务实现
 * @author fxy
 */
@Service
public class BaseServiceImpl implements BaseService {

    @Autowired
    private BaseMapper baseMapper;

    @Autowired
    private DictMapper dictMapper;

    @Autowired
    private OverviewMapper overviewMapper;
    /**
     *
     * @param startNum 起始页数\
     * @param pageSize 显示几条
     * @return 分页后的数据
     */
    @Override
    public Page<Base> queryAllBaseByPage(Integer startNum,Integer pageSize) {
        //每页显示的数量
        //开启分页 pageNum > 0 ? pageNum:1 判断当前页数是否大于0
        PageHelper.startPage(startNum > 0 ? startNum:1,pageSize);
        //查询全部数据
        List<Base> bases = baseMapper.selectAllBase();
        //分页
        PageInfo<Base> baseRegisterPages = new PageInfo<Base>(bases);
        //封装分页数据
        Page page = new Page();
        //分页之后的数据
        page.setMenuList(baseRegisterPages.getList());
        //总记录数
        page.setTotalRecord((int)baseRegisterPages.getTotal());
        //返回封装的分页对象
        return page;
    }

    /**
     * 根据id查询基地信息
     * @param id 基地id
     * @return 基地信息
     */
    @Override
    public Base queryBaseById(Integer id) {
        return baseMapper.selectByPrimaryKey(id);
    }

    /**
     * 分页查询指定所属人的基地集合
     * @param baseId 所属人
     * @return 分页信息
     */
    @Override
    public Base queryBaseByBaseId(Integer baseId) {
        Base base = baseMapper.selectBaseByBaseId(baseId);
        return base;
    }

    /**
     * 分页多条件查询基地信息
     * @param startNum 起始页
     * @param base 基地信息
     * @return 分页信息
     */
    @Override
    public Page<Base> queryBaseByMany(Integer startNum,Integer pageSize, Base base) {
        //每页显示的数量
        //开启分页 pageNum > 0 ? pageNum:1 判断当前页数是否大于0
        PageHelper.startPage(startNum > 0 ? startNum:1,pageSize);
        //查询全部数据
        List<Base> bases = baseMapper.selectByMany(base);
        //分页
        PageInfo<Base> baseRegisterPages = new PageInfo<Base>(bases);
        //封装分页数据
        Page page = new Page();
        //分页之后的数据
        page.setMenuList(baseRegisterPages.getList());
        //总记录数
        page.setTotalRecord((int)baseRegisterPages.getTotal());
        //返回封装的分页对象
        return page;
    }

    /**
     * 添加信息
     * @param base
     */
    @Override
    public void addOneBase(Base base) {
        //根据字典id查询
        Dict dict = dictMapper.selectByPrimaryKey(base.getEducationId());
        //赋值教育局
        base.setEducationName(dict.getDicName());
        //根据字典id查询
        Dict dict1 = dictMapper.selectByPrimaryKey(base.getBaseFeatureId());
        base.setBaseFeatureName(dict1.getDicName());
        //将课程状态设置成未发布
        base.setAuditState(1);
        //添加基地
        baseMapper.insertSelective(base);
        //创建基地对应的描述对象 1.基地概述
        Overview baseGeneral = new Overview();
        //添加基地id
        baseGeneral.setBaseId(base.getId());
        //描述类型1 代表基地描述
        baseGeneral.setDescriptionType(1);
        //发布状态默认未发布
        baseGeneral.setReleaseState(1);

        //创建基地对应的描述对象 2.代表餐饮描述
        Overview baseCatering = new Overview();
        //添加基地id
        baseCatering.setBaseId(base.getId());
        //描述类型2 代表餐饮描述
        baseCatering.setDescriptionType(2);
        //发布状态默认未发布
        baseCatering.setReleaseState(1);

        //创建基地对应的描述对象 3.接待描述
        Overview baseReception = new Overview();
        //添加基地id
        baseReception.setBaseId(base.getId());
        //描述类型 3.接待描述
        baseReception.setDescriptionType(3);
        //发布状态默认未发布
        baseReception.setReleaseState(1);

        //添加
        overviewMapper.insert(baseGeneral);
        overviewMapper.insert(baseCatering);
        overviewMapper.insert(baseReception);


    }

    /**
     * 更新信息 审核状态
     * @param base
     */
    @Override
    public void editBaseById(Base base) {
        baseMapper.updateByPrimaryKeySelective(base);
    }
}
